/* 
 * jQuery Fixed Plugins 1.5.1
 * Author:
 * Url:
 * Data
 *
 *  Update Log:
 * 
 *  Status       Date            Name      Version           BUG-Description
 *  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 *  Created      2012-08-15    	 Ru	       1.0               None
 
 *  Modified     2012-09-02      Ru        1.4.1             修复了webkit内核浏览器右边浮动有一定距离的bug(负外边距),增加了悬浮靠边的定位、是否显示关闭按钮、是否垂直居中定位
 
 *  Modified     2013-01-02    	 Ru	       1.5.1             增加了垂直方向的位置;把核心函数(关闭、展开、定位、最小化)重构,修复了webkit内核浏览器右边浮动最小化时没有显示出来
 *  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/

;
(function ($) {
	$.fn.fix = function (options) {
		var defaults = {
			position: "left", //悬浮位置 - left或right
			horizontal: 0, //水平方向的位置 - 默认为数字
			vertical: null, //垂直方向的位置 - 默认为null
			halfTop: false, //是否垂直居中位置
			minStatue: false, //是否最小化
			hideCloseBtn: false, //是否隐藏关闭按钮
			skin: "gray", //风格皮肤
			showBtnWidth: 28, //show_btn_width
			contentBoxWidth: 154, //side_content_width
			durationTime: 1000 //完成时间
		}
		var options = $.extend(defaults, options);

		this.each(function () {
			//获取对象
			var thisBox = $(this),
				closeBtn = thisBox.find(".close_btn"),
				show_btn = thisBox.find(".show_btn"),
				contentBox = thisBox.find(".content_box"),
				sideList = thisBox.find(".side_list");

			//设置内容的高度
			thisBox.height(contentBox.height());

			//最小化
			if (options.minStatue) {
				show_btn.show();
				if (options.position == "left") {
					contentBox.css({
						left: -options.contentBoxWidth
					});
				} else if (options.position == "right") {
					contentBox.css({
						right: -options.contentBoxWidth
					});
				}
				thisBox.css({
					width: options.showBtnWidth
				});
			}
			//皮肤控制
			if (options.skin) thisBox.addClass("skin_" + options.skin);
			//隐藏关闭按钮
			if (options.hideCloseBtn) closeBtn.css("display", "none");

			//定位			
			var boxTop = null,
				defaultTop = thisBox.offset().top, //对象的默认top
				halfTop = ($(window).height() - thisBox.height()) / 2 //垂直居中时候的top
			;
			if (options.vertical == null) {
				boxTop = defaultTop;
			} else {
				boxTop = options.vertical;
			}
			if (options.halfTop) {
				boxTop = halfTop;
			}

			thisBox.css(options.position, options.horizontal);
			thisBox.css("top", boxTop);


			//核心scroll事件
			$(window).bind("scroll", function () {
				var offsetTop = boxTop + $(window).scrollTop() + "px";
				thisBox.animate({
					top: offsetTop
				}, {
					duration: options.durationTime,
					queue: false //此动画将不进入动画队列
				});
			});

			//关闭
			closeBtn.bind("click", function () {
				show_btn.show();
				if (options.position == "left") {
					contentBox.animate({
						left: -options.contentBoxWidth
					}, "fast");
				} else if (options.position == "right") {
					contentBox.animate({
						right: -options.contentBoxWidth
					}, "fast");
				}
				thisBox.animate({
					width: options.showBtnWidth
				}, "fast");
			});

			//展开
			show_btn.bind("click", function () {
				if (options.position == "left") {
					contentBox.animate({
						left: 0
					}, "fast");
				} else if (options.position == "right") {
					contentBox.animate({
						right: 0
					}, "fast");
				}
				thisBox.animate({
					width: options.contentBoxWidth
				}, "fast");
				show_btn.hide();
			});

		}); //end this.each

	};
})(jQuery);